package indi.cloud.common.convert;

import lombok.Data;
import lombok.experimental.Accessors;

import java.util.HashMap;
import java.util.Map;

/**
 * @author yangyifan
 * @version 1.0
 * @date 2024/2/2 15:57
 * @Description
 */
@Data
@Accessors(chain = true)
public class Unit<T> {
    private Map<String, Data> unit = new HashMap<>();


    @lombok.Data
    @Accessors(chain = true)
    public class Data {
        private Integer unitType;
        /**
         * 是否千分位
         */
        private Boolean isThousandth = false;

        /**
         * 小数位数长度，默认2
         */
        private Integer numScale = 2;

        public Data(Integer unitType, Boolean isThousandth) {
            this.unitType = unitType;
            this.isThousandth = isThousandth;
        }

        public Data(Integer unitType, Boolean isThousandth, Integer numScale) {
            this.unitType = unitType;
            this.isThousandth = isThousandth;
            this.numScale = numScale;
        }
    }

    /**
     * @param key  需要转换得key
     * @param type 0：不转 1:元转万元  2：（百分比）  *100保留两位小数
     * @return
     */
    public T unit(String key, Integer type) {
        unit.put(key, new Data(type, false));
        return (T) this;
    }

    /**
     * @param key  需要转换得key
     * @param type 1:元转万元  2：（百分比）  *100保留两位小数
     * @return
     */
    public T unit(String key, Integer type, Boolean isThousandth) {
        unit.put(key, new Data(type, isThousandth));
        return (T) this;
    }

    /**
     * @param key  需要转换得key
     * @param type 1:元转万元  2：（百分比）  *100保留两位小数
     * @return
     */
    public T unit(String key, Integer type, Integer numScale) {
        unit.put(key, new Data(type, false, numScale));
        return (T) this;
    }

    /**
     * @param key  需要转换得key
     * @param type 1:元转万元  2：（百分比）  *100保留两位小数
     * @return
     */
    public T unit(String key, Integer type, Boolean isThousandth, Integer numScale) {
        unit.put(key, new Data(type, false, numScale));
        return (T) this;
    }

    /**
     * 只加千分位
     *
     * @param key
     * @return
     */
    public T unit(String key, Boolean isThousandth) {
        unit.put(key, new Data(null, isThousandth));
        return (T) this;
    }

//    public Map<String, Unit.Data> getUnit() {
//        return unit;
//    }
}
